home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / Python 133 SRC / Mac / Modules / qd / qdscan.py < prev    next >
Text File  |  1996-04-12  |  3KB  |  140 lines

  1. # Scan an Apple header file, generating a Python file of generator calls.
  2.  
  3. import addpack
  4. addpack.addpack(':Tools:bgen:bgen')
  5.  
  6. from scantools import Scanner
  7. from bgenlocations import TOOLBOXDIR
  8.  
  9. def main():
  10.     input = "QuickDraw.h"
  11.     output = "qdgen.py"
  12.     defsoutput = TOOLBOXDIR + "QuickDraw.py"
  13.     scanner = MyScanner(input, output, defsoutput)
  14.     scanner.scan()
  15.     scanner.close()
  16.     
  17.     # Grmpf. Universal Headers have Text-stuff in a different include file...
  18.     input = "QuickDrawText.h"
  19.     output = "@qdgentext.py"
  20.     defsoutput = "@QuickDrawText.py"
  21.     have_extra = 0
  22.     try:
  23.         scanner = MyScanner(input, output, defsoutput)
  24.         scanner.scan()
  25.         scanner.close()
  26.         have_extra = 1
  27.     except IOError:
  28.         pass
  29.     if have_extra:
  30.         print "=== Copying QuickDrawText stuff into main files... ==="
  31.         ifp = open("@qdgentext.py")
  32.         ofp = open("qdgen.py", "a")
  33.         ofp.write(ifp.read())
  34.         ifp.close()
  35.         ofp.close()
  36.         ifp = open("@QuickDrawText.py")
  37.         ofp = open(TOOLBOXDIR + "QuickDraw.py", "a")
  38.         ofp.write(ifp.read())
  39.         ifp.close()
  40.         ofp.close()
  41.         
  42.     print "=== Done scanning and generating, now importing the generated code... ==="
  43.     import qdsupport
  44.     print "=== Done.  It's up to you to compile it now! ==="
  45.  
  46. class MyScanner(Scanner):
  47.  
  48.     def destination(self, type, name, arglist):
  49.         classname = "Function"
  50.         listname = "functions"
  51.         if arglist:
  52.             t, n, m = arglist[0]
  53. ##            elif t == "PolyHandle" and m == "InMode":
  54. ##                classname = "Method"
  55. ##                listname = "p_methods"
  56. ##            elif t == "RgnHandle" and m == "InMode":
  57. ##                classname = "Method"
  58. ##                listname = "r_methods"
  59.         return classname, listname
  60.  
  61.     def makeblacklistnames(self):
  62.         return [
  63.             'InitGraf',
  64.             'StuffHex',
  65.             'StdLine',
  66.             'StdComment',
  67.             'StdGetPic',
  68.             'OpenPort',
  69.             'InitPort',
  70.             'ClosePort',
  71.             'OpenCPort',
  72.             'InitCPort',
  73.             'CloseCPort',
  74.             'BitMapToRegionGlue',
  75.             ]
  76.  
  77.     def makeblacklisttypes(self):
  78.         return [
  79.             'CCrsrHandle',
  80.             'CIconHandle',
  81.             'CQDProcs',
  82.             'CSpecArray',
  83.             'CTabHandle',
  84.             'ColorComplementProcPtr',
  85.             'ColorComplementUPP',
  86.             'ColorSearchProcPtr',
  87.             'ColorSearchUPP',
  88.             'ConstPatternParam',
  89.             'DeviceLoopDrawingProcPtr',
  90.             'DeviceLoopFlags',
  91. ##            'FontInfo',
  92.             'GDHandle',
  93.             'GrafVerb',
  94.             'OpenCPicParams_ptr',
  95.             'Ptr',
  96.             'QDProcs',
  97.             'ReqListRec',
  98.             'void_ptr',
  99.             ]
  100.  
  101.     def makerepairinstructions(self):
  102.         return [
  103.             ([('void_ptr', 'textBuf', 'InMode'),
  104.               ('short', 'firstByte', 'InMode'),
  105.               ('short', 'byteCount', 'InMode')],
  106.              [('TextThingie', '*', '*'), ('*', '*', '*'), ('*', '*', '*')]),
  107.             
  108.             # GetPen and SetPt use a point-pointer as output-only:
  109.             ('GetPen', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
  110.             ('SetPt', [('Point', '*', 'OutMode')], [('*', '*', 'OutMode')]),
  111.             
  112.             # All others use it as input/output:
  113.             ([('Point', '*', 'OutMode')],
  114.              [('*', '*', 'InOutMode')]),
  115.              
  116.              # InsetRect, OffsetRect
  117.              ([('Rect', 'r', 'OutMode'),
  118.                  ('short', 'dh', 'InMode'),
  119.                  ('short', 'dv', 'InMode')],
  120.               [('Rect', 'r', 'InOutMode'),
  121.                  ('short', 'dh', 'InMode'),
  122.                  ('short', 'dv', 'InMode')]),
  123.  
  124.              # MapRect
  125.              ([('Rect', 'r', 'OutMode'),
  126.                  ('Rect_ptr', 'srcRect', 'InMode'),
  127.                  ('Rect_ptr', 'dstRect', 'InMode')],
  128.               [('Rect', 'r', 'InOutMode'),
  129.                  ('Rect_ptr', 'srcRect', 'InMode'),
  130.                  ('Rect_ptr', 'dstRect', 'InMode')]),
  131.                  
  132.              # CopyBits and friends
  133.              ([('RgnHandle', 'maskRgn', 'InMode')],
  134.               [('OptRgnHandle', 'maskRgn', 'InMode')]),
  135.             
  136.             ]
  137.  
  138. if __name__ == "__main__":
  139.     main()
  140.